const dayjs = require('dayjs');
/*
 * @Author: bug巫师 184179023@.com
 * @Date: 2025-03-07 12:11:34
 * @LastEditors: bug巫师 184179023@.com
 * @LastEditTime: 2025-03-07 12:19:18
 * @FilePath: \ABS.OA\miniprogram\projects\oa\pages\feedback\index\feedback_index.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */

// 使用统一配置入口模式导入
const pathImport = require('../helpers/path_import.js');
const { pageHelper, cloudHelper, FeedbackService, ProjectBiz } = pathImport;

// MobX相关导入 - 使用正确的项目级配置路径
const npmConfig = require('../../../config/npm_config.js');
const { createStoreBindings } = npmConfig;
const feedbackStore = require('../../../store/feedback_store.js').feedbackStore;

Page({
  data: {
    // 本地页面数据，将与store数据合并
    feedbackType: '',
    content: '',
    mediaList: []
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 创建store绑定
    this.storeBindings = createStoreBindings(this, {
      store: feedbackStore,
      fields: ['feedbackTypes', 'loading'],
      actions: ['setLoading', 'addFeedback', 'setFeedbackTypes']
    });

    // 页面初始化
    ProjectBiz.initPage(this);
    
    // 加载反馈类型数据
    this._loadFeedbackTypes();
  },
  
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 清理store绑定
    this.storeBindings.destroyStoreBindings();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },
  
  // 加载反馈类型数据
  _loadFeedbackTypes() {
    // 如果已经有了类型数据，就不重新加载
    if (this.data.feedbackTypes && this.data.feedbackTypes.length > 0) return;
    
    // 设置加载状态
    this.setLoading(true);
    
    // 这里可以调用云函数获取类型数据
    // 为简化示例，使用静态数据
    const types = [
      { id: '1', name: '功能问题' },
      { id: '2', name: '性能问题' },
      { id: '3', name: '质量问题' },
      { id: '4', name: '需求建议' },
      { id: '5', name: '其他问题' }
    ];
    
    // 更新store中的类型数据
    this.setFeedbackTypes(types);
    this.setLoading(false);
  },

  url: function (e) {
    pageHelper.url(e, this);
  },

  handleTypeChange(e) {
    this.setData({
      feedbackType: e.detail.value
    });
  },

  handleContentChange(e) {
    this.setData({
      content: e.detail.value
    });
  },

  handleUpload() {
    wx.chooseMedia({
      count: 1,
      mediaType: ['image', 'video'],
      sourceType: ['album', 'camera'],
      maxDuration: 30,
      camera: 'back',
      success: (res) => {
        const tempFiles = res.tempFiles;
        if (tempFiles[0].size > 10 * 1024 * 1024) {
          pageHelper.showModal('文件大小不能超过10M');
          return;
        }
        
        // 将媒体文件添加到列表
        let media = tempFiles[0];
        media.fileType = res.type; // 添加文件类型标记（image或video）
        
        this.setData({
          mediaList: [...this.data.mediaList, media]
        });
      }
    });
  },
  
  // 删除已上传的媒体文件
  deleteMedia(e) {
    const index = e.currentTarget.dataset.index;
    let mediaList = this.data.mediaList;
    mediaList.splice(index, 1);
    this.setData({
      mediaList
    });
  },

  handleSubmit() {
    const { feedbackType, content, mediaList } = this.data;
    
    if (!feedbackType) {
      pageHelper.showModal('请选择问题类型');
      return;
    }
    if (!content) {
      pageHelper.showModal('请描述具体问题');
      return;
    }

    // 设置加载状态
    this.setLoading(true);
    pageHelper.showLoadingToast('提交中...');
    
    // 准备提交的数据
    const feedbackData = {
      type: feedbackType,
      content: content,
      createTime: dayjs(),
      status: 'pending',
      mediaList: mediaList
    };
    
    // 调用store的action提交反馈
    this.addFeedback(feedbackData)
      .then(() => {
        pageHelper.showSuccToastReturn('提交成功');
      })
      .catch(err => {
        console.error('提交反馈失败', err);
        pageHelper.showModal('提交失败，请稍后重试');
      })
      .finally(() => {
        this.setLoading(false);
      });
  }
}); 